package LeetCode;

import java.util.HashSet;

//
// Created by ✎﹏ℳ๓独赏☆独醉 on 2024/4/17.
// 
public class 最长无重复子串 {
    public static void main(String[] args) {
//        int l = lengthOfLongestSubstring("abcabcbb");
//        int l = lengthOfLongestSubstring("bbbbbbb");
        int l = lengthOfLongestSubstring("pwwkew");
        System.out.println(l);
    }

 //时间复杂度过高
//    private static int lengthOfLongestSubstring(String s) {
//        int maxNum = 0;
//        for (int i = 0; i < s.length(); i++) {
//            String t = String.valueOf(s.charAt(i));
//            flag:for (int j = i+1; j < s.length(); j++) {
//                if(!t.contains(String.valueOf(s.charAt(j)))){
//                    t += String.valueOf(s.charAt(j));
//                }else {
//                    break flag;
//                }
//            }
//            if(maxNum < t.length()){
//                maxNum = t.length();
//            }
//        }
//
//        return maxNum;
//    }

    private static int lengthOfLongestSubstring(String s) {
        int maxNum = 0;
        HashSet<Character> set = new HashSet<>();
        int j = 0;
        for (int i = 0; i < s.length(); i++) {
            while (set.contains(s.charAt(i))){
                set.remove(j);
                j++;
            }
            set.add(s.charAt(i));
            maxNum = Math.max(maxNum,set.size());
        }

        return maxNum;
    }
}
